package com.agile.leetcode.map.mapcompare;


import org.junit.Test;

import java.util.*;

/**
 * 各种map的比较
 *
 * @Author KD
 * @Date 2021/1/28 14:13
 */
@SuppressWarnings("all")
public class MapCompareDemo {
    /**
     * 允许键为null
     * 无序
     */
    @Test
    public void map1() {
        Map<Integer, String> map = new HashMap<>();
        map.put(3, "c");
        map.put(1, "a");
        map.put(2, "b");
        map.put(null, null);
        // 遍历
        iterator(map);
    }

    /**
     * TreeMap：在需要按自然顺序或自定义顺序遍历键的情况
     * 底层以红黑树的方式实现
     * 不允许键为null,允许值为null
     */
    @Test
    public void map2() {
        Map<Integer, String> map = new TreeMap<>();
        map.put(3, "c");
        map.put(1, "a");
        map.put(2, "b");
        map.put(5,null);
        // 遍历
        iterator(map);
    }

    /**
     * 有序的map
     * 允许键为null
     * 具有插入顺序和访问顺序两种访问方式
     */
    @Test
    public void map3() {
        // accessOrder=false 按照插入顺序进行遍历
        Map<Integer, String> map = new LinkedHashMap<>();
        map.put(3, "c");
        map.put(1, "a");
        map.put(2, "b");
        map.put(null, null);
        iterator(map);
        System.out.println("==========");
        // 按照访问顺序进行遍历
        Map<Integer, String> map2 = new LinkedHashMap<>(16, 0.75f, true);
        map2.put(3, "c");
        map2.put(1, "a");
        map2.put(2, "b");
        iterator(map2);
        map2.get(3);
        iterator(map2);
    }

    public void iterator(Map<Integer, String> map) {
        // 遍历
        Iterator<Map.Entry<Integer, String>> iterator = map.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<Integer, String> next = iterator.next();
            System.out.println(next.getKey() + "=" + next.getValue());
        }
    }
}
